-- @owner: xue-xinyi610
-- @date: 2025/2/20
-- @testpoint: I8XDZ2 新增功能，禁用全部触发器后，启用其中一个触发器，插入数据。，启用的触发器执行，禁用的触发器未执行。。

-- 步骤pre 1 清理旧表
DROP TABLE IF EXISTS test_table;  

-- 步骤pre 2 新建测试表
CREATE TABLE test_table (id1 INT, id2 INT, id3 INT);  

-- 步骤pre 3 清理触发器函数
DROP FUNCTION IF EXISTS test_function;  
DROP FUNCTION IF EXISTS test_function2;  

-- 步骤pre 4 创建两个触发器函数
CREATE OR REPLACE FUNCTION test_function() RETURNS TRIGGER AS
$$
BEGIN
  UPDATE test_table SET id2 = 5 WHERE id1 = 1;
  RAISE NOTICE '触发器test_trigger已执行';
  RETURN NEW;
END
$$ LANGUAGE PLPGSQL;/  

CREATE OR REPLACE FUNCTION test_function2() RETURNS TRIGGER AS
$$
BEGIN
  UPDATE test_table SET id3 = 10 WHERE id1 = 1;
  RAISE NOTICE '触发器test_trigger2已执行';
  RETURN NEW;
END
$$ LANGUAGE PLPGSQL;/  

-- 步骤pre 5 创建两个触发器
DROP TRIGGER IF EXISTS test_trigger ON test_table;  
CREATE TRIGGER test_trigger
BEFORE INSERT ON test_table
EXECUTE PROCEDURE test_function();/  

DROP TRIGGER IF EXISTS test_trigger2 ON test_table;  
CREATE TRIGGER test_trigger2
AFTER INSERT ON test_table
EXECUTE PROCEDURE test_function2();/  

-- 步骤pre 6 禁用所有触发器
ALTER TABLE test_table DISABLE TRIGGER USER; 

-- 步骤test 1 启用特定触发器
ALTER TABLE test_table ENABLE TRIGGER test_trigger;  

-- 测试插入数据
INSERT INTO test_table (id1) VALUES (1); 
INSERT INTO test_table (id1) VALUES (1); 
select * from test_table;

-- 步骤post 清理对象
DROP TRIGGER test_trigger ON test_table;  
DROP TRIGGER test_trigger2 ON test_table;  
DROP FUNCTION test_function;  
DROP FUNCTION test_function2;  
DROP TABLE test_table;  
